Copyright © 2021 ARC, All rights reserved

Bond Yield Curve Bootstrapping

Mathematical symbols used in this notebook

Symbol Comment
tr Time to maturity
t Time to maturity (interpolated)
yr Yield to maturity
y Yield to maturity (interpolated)
s Bootstrapped spot rate

We're going to construct in detail a zero-coupon yield curve, called zero curve as well, with bonds by using bootstrapping method.

Bootstrapping of spot rates

Before going into details regarding the bootstrapping algorithm, we should explain the difference between yield curve and spot rate curve.

By definition, the yield curve shows several bond yields to maturity (ytm) across different times to maturity (ttm). Yield to maturity is an overall discount rate which equalizes principal and coupon payments to the initial investment value, assuming reinvestability of all cash flows.

In contrast to the yield curve, a spot rate curve represents spot rates used to discount individual cash flows of the bond. Hence, a whole range of different spot rates is typically used when equalizing bond's future cash flows to its present value.

To bootstrap the yield curve, we will be building upon a fact that all bonds priced at par have coupon rate equal to the yield-to-maturity, as denoted in the following equation:

\begin{equation}\frac{C}{\left ( 1+r \right )^1} + \frac{C}{\left ( 1+r \right )^2}+...+\frac{1+C}{\left ( 1+r \right )^n} = 100\end{equation}

Given the face value is $\$100$, coupon rate $C$ is equal to $\$100∗r$

In case of the continuous compounding of the interests the equation (1) becomes

\begin{equation}C \times e^{-r \times 1} + C \times e^{-r \times 2} + ... + \left ( 1 + C\right ) \times e^{-r \times n} = 100\end{equation}

Starting from first bond which matures in three months, we will gradually derive all spot rates by forward substitution of the previously calculated ones. This can be best illustrated on a numerical example.

All the computations will be done with the day count convention 30/360. This convention is commonly called Bond Basis.

Zero-coupon calculation with 3 months maturity

Starting from the bond which pays both quarterly coupon and principal in 3 months. By applying the fomula (2), we get

\begin{equation} \left ( 100 + 0\right ) \times e^{-r \times t} = 97.5 \end{equation}

As we mentioned above the trade date is

So, the related maturity date computed by adding 3 months to the above trade date is

The year fraction between the above trade date and maturity date in the basis 30/360 is

Right now, from the equation (3) we deduce by replacing t by the year fraction 0.25 that

$$ r = \frac{log\left (\frac{100}{97.5} \right)}{t} = \frac{log\left (\frac{100}{97.5} \right)}{0.25}$$

So, the computed zero-coupon is

Zero-coupon calculation with 6 months maturity

Now, for a zero-coupon with a maturity of 6 months, it will receive a single coupon. By applying the fomula (2), we get

\begin{equation} \left ( 100 + 0\right ) \times e^{-r \times t} = 94.9 \end{equation}

Its related maturity date computed by adding 6 months to the above trade date is

The year fraction between the above trade date and maturity date in the basis 30/360 is

Right now, from the equation (4) we deduce by replacing t by the year fraction 0.5 that

$$ r = \frac{log\left (\frac{100}{94.9} \right)}{t} = \frac{log\left (\frac{100}{94.9} \right)}{0.5}$$

So, the computed zero-coupon is

Zero-coupon calculation with 1 year maturity

Now, for a zero-coupon with a maturity of 1 year, it will receive a single coupon. By applying the fomula (2), we get

\begin{equation} \left ( 100 + 0\right ) \times e^{-r \times t} = 90.0 \end{equation}

Its related maturity date computed by adding 1 year the above trade date is

The year fraction between the above trade date and maturity date in the basis 30/360 is

Right now, from the equation (5) we deduce by replacing t by the year fraction 0.5 that

$$ r = \frac{log\left (\frac{100}{90.0} \right)}{t} = log\left (\frac{100}{90.0} \right)$$

So, the computed zero-coupon is

Zero-coupon calculation with 1 year and 6 months maturity

Now, for a zero-coupon with a maturity of 1 year and 6 monts , it will receive three coupons at 6M, 1Y and 1Y6M. By applying the fomula (2), we get

\begin{equation} 4 \times e^{-0.10469296 \times 0.5} + 4 \times e^{-0.10536052 \times 1} + \left ( 100 + 4\right ) \times e^{-r \times t} = 96.0 \end{equation}

Its related maturity date computed by adding 1 year and 6 months the above trade date is

The year fraction between the above trade date and maturity date in the basis 30/360 is

Right now, from the equation (6) we deduce by replacing t by the year fraction 1.5 that

$$ r = \frac{-log\left (\frac{\left (96.0 - 4 \times e^{-0.10469296 \times 0.5} - 4 \times e^{-0.10536052 \times 1} \right )}{104}\right )}{1.5} $$

So, the computed zero-coupon is

Zero-coupon calculation with 2 years maturity

Now, for a zero-coupon with a maturity of 1 year and 6 monts , it will receive four coupons at 6M, 1Y, 1Y6M and 2Y. By applying the fomula (2), we get

\begin{equation} 6 \times e^{-0.10469296 \times 0.5} + 6 \times e^{-0.10536052 \times 1} + 6 \times e^{-0.10680926 \times 1.5} + \left ( 100 + 6\right ) \times e^{-r \times t} = 101.6 \end{equation}

Its related maturity date computed by adding 2 years the above trade date is

The year fraction between the above trade date and maturity date in the basis 30/360 is

Right now, from the equation (7) we deduce by replacing t by the year fraction 2 that

$$ r = \frac{-log\left (\frac{\left (101.6 - 6 \times e^{-0.10469296 \times 0.5} - 6 \times e^{-0.10536052 \times 1} - 6 \times e^{-0.10680926 \times 1.5} \right )}{106}\right )}{2} $$

So, the computed zero-coupon is

Here is the final table

The zero curve constructed